iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 8
0

Provider

今天的主題是 Provider,以中文來翻譯的話,Provider 就是提供者,先來看一下文件上的定義:
https://ithelp.ithome.com.tw/upload/images/20200923/20119619KqxXfMc4I2.png

既然叫提供者,那就意味著自己肯定可以提供什麼東西讓他人使用,在 NestJS 中,除了 Controller 以外,幾乎其他所有東西都可以被視為「Provider」,例如:service、repository、factory、helper 等等。

所有的邏輯跟相關操作都可以放在 Provider 層,他們可以透過 Constructor 注入依賴關係讓其他 Controller 或 Service 來使用。

如何讓 Class 成為一個 Provider

以原有的 AppService 為例,在這個 Class 加上 Class 裝飾器「@Injectable()」,即可讓此 Class 成為 Provider:
https://ithelp.ithome.com.tw/upload/images/20200923/20119619dn8GTZpcFk.png

如何調用 Provider 中的方法

我們會在 Provider 中撰寫商業邏輯(比方說對資料庫的操作、複雜的計算等等),撰寫完之後的方法,舉個例子來說:
https://ithelp.ithome.com.tw/upload/images/20200923/20119619NVO7P09XEf.png

若我們的 Controller 想調用此 Provider 中的方法,需要先將此 Provider 使用 DI 注入:
https://ithelp.ithome.com.tw/upload/images/20200923/20119619mxRYPlVJ5k.png

注入成功之後,即可使用此 Provider 中的方法,試著呼叫看看:
https://ithelp.ithome.com.tw/upload/images/20200923/20119619sUI09Dc4Hj.png

https://ithelp.ithome.com.tw/upload/images/20200923/20119619XsjfsZXADB.png

看來有呼叫成功呢。

在 Module 註冊我們的 Provider

文件中可以看到,要使用此 Provider,必須先在 Module 中註冊它:
https://ithelp.ithome.com.tw/upload/images/20200923/20119619HiWgSkDh8b.png

由於我們的 AppService 原本就在 AppModule 中有註冊了:
https://ithelp.ithome.com.tw/upload/images/20200923/20119619f31sx8ACwr.png

若我想自己創一個 Provider,但不註冊會怎麼樣呢,先創個 CatService:
https://ithelp.ithome.com.tw/upload/images/20200923/20119619RnpQqn4fQs.png

然後注入到 Controller 中並調用方法,並且重新運行 Server:
https://ithelp.ithome.com.tw/upload/images/20200923/20119619WnQyjg77yn.png

然後很快就彈錯誤啦:
https://ithelp.ithome.com.tw/upload/images/20200923/20119619cqv2rm0GAf.png

讓我們來修復它,在 Module 中的 Provider 加入 CatService 然後重新運行看看:
https://ithelp.ithome.com.tw/upload/images/20200923/201196197pheci2NHX.png

看來沒問題了呢。
https://ithelp.ithome.com.tw/upload/images/20200923/20119619O0OuNesqXi.png

https://ithelp.ithome.com.tw/upload/images/20200923/20119619aIdAJbgqkj.png

下一篇章

下一篇章來講 Module 基礎篇,串起整個 Controller、Provdier、與 Module 的環節。

/*
本系列文係個人新手開發心得,可能會有許多錯誤,煩請多多包容不吝指教。
*/


上一篇
Day 07 - NestJS 中的 Controller 基礎篇
下一篇
Day 09 - NestJS 中的 Module 基礎篇
系列文
從零開始的後端異世界生活30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言